/*
 * 描述： <描述>
 * 修改人： rain
 * 修改时间： 2016年7月25日
 * 项目： rainhy-minitools
 */
package com.rainhy.minitools.sudoku;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;

/**
 * 行
 * 
 * @author rain
 * @version [版本号, 2016年7月25日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public class Row implements Serializable {
    private static final long serialVersionUID = -2609032426523216446L;
    
    /** 行号(y) */
    private final int y;
    
    /** 行(x,grid) */
    private final Map<Integer, Grid> grids = new HashMap<>();
    
    /** 用行号来构建行 */
    public Row(int y) {
        super();
        this.y = y;
    }
    
    /** 初始化格子 */
    public void init(Grid grid) {
        if (this.y == grid.getY()) {
            this.grids.put(grid.getX(), grid);
        }
    }
    
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Row other = (Row) obj;
        if (y != other.y)
            return false;
        return true;
    }
    
    /** grid */
    public Grid getGrid(Integer x) {
        return this.grids.get(x);
    }
    
    /** 行(x,grid) */
    @SuppressWarnings("unchecked")
    public Map<Integer, Grid> getGrids() {
        return MapUtils.unmodifiableMap(grids);
    }
    
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + y;
        return result;
    }
    
    @Override
    public String toString() {
        return StringUtils.join(grids.values(), ",");
    }
    
    /**
     * <功能简述><br>
     * <功能详细描述>
     *
     * @param grid
     * 
     * @return void [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     * @version [版本号, 2016年8月1日]
     * @author rain
     */
    public void refresh(Grid grid) {
        // TODO Auto-generated method stub
        
    }
}
